package com.dyna.patterns.creation.prototype;

import com.dyna.patterns.creation.prototype.Person;

import java.util.HashMap;
import java.util.Map;

public class DynamicMybatis {

    private Map<String,Person> userCache = new HashMap<>();

    public Person getPerson(String username) throws CloneNotSupportedException {
        Person person = null;
        //从数据库中获取
        if (!userCache.containsKey(username)) {
            person = getFromDb(username);
        }else {
            //这里不能注释掉，第一次从数据库放到缓存以后，在缓存中存放的是一个引用，所以一旦修改缓存中的数据也会被修改掉。
            //因为存放在缓存中的是clone出来的副本，所以在第一次从数据库获取到数据以后，进行修改无论如何都不会等于后面的对象的。
            //所以原型模式的本质是clone
            person = userCache.get(username);
            person = (Person) person.clone();
            System.out.println();
        }
        return person;
    }

    public Person getFromDb(String username) throws CloneNotSupportedException {
        Person person = new Person();
        person.setUsername(username);
        person.setAge(18);
        //从数据库获取的时候要往缓存中放一份
        userCache.put(username, (Person) person.clone());
        return person;
    }

}
